home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / tcp / amitcptelnetf.lha / amitcp_telnet+ftp / telnet / main.c < prev    next >
C/C++ Source or Header  |  1993-08-13  |  4KB  |  197 lines

  1. /*
  2.  * Copyright (c) 1988, 1990 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted provided
  6.  * that: (1) source distributions retain this entire copyright notice and
  7.  * comment, and (2) distributions including binaries display the following
  8.  * acknowledgement:  ``This product includes software developed by the
  9.  * University of California, Berkeley and its contributors'' in the
  10.  * documentation or other materials provided with the distribution and in
  11.  * all advertising materials mentioning features or use of this software.
  12.  * Neither the name of the University nor the names of its contributors may
  13.  * be used to endorse or promote products derived from this software without
  14.  * specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  16.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. #ifndef lint
  21. char copyright[] =
  22. "@(#) Copyright (c) 1988, 1990 Regents of the University of California.\n\
  23.  All rights reserved.\n";
  24. #endif /* not lint */
  25.  
  26. #ifndef lint
  27. static char sccsid[] = "@(#)main.c    5.1 (Berkeley) 9/14/90";
  28. #endif /* not lint */
  29.  
  30. #include <sys/types.h>
  31. #include <string.h>
  32.  
  33. #include "ring.h"
  34. #include "externs.h"
  35. #include "defines.h"
  36. #ifdef AMI_TCP
  37. #include  <bsdsocket.h>
  38. #else
  39. #include  <ss/socket.h>
  40. #endif
  41.  
  42. const static char version[] = "telnet 2.0 (13.8.93)";
  43.      
  44. /*
  45.  * Initialize variables.
  46.  */
  47. void
  48. tninit()
  49. {
  50.     init_terminal();
  51.  
  52.     init_network();
  53.     
  54.     init_telnet();
  55.  
  56.     init_sys();
  57.  
  58. }
  59.  
  60. int    autologin;
  61. #ifdef __SASC
  62.     int Enable_Abort;
  63. #endif
  64. #ifdef AMI_TCP
  65.     struct Library *SocketBase = 0;
  66. #else
  67.     struct Library *SockBase = 0;
  68. #endif
  69. struct Library *OpenLibrary();
  70. FILE *log_file = 0;
  71. long bytesin,
  72.      bytesout;
  73.  
  74. void closesockets(void)
  75. {
  76. #ifdef AMI_TCP    
  77.     if (SocketBase)
  78.         {
  79.         CloseLibrary(SocketBase);
  80.         SocketBase = 0;
  81.         }
  82. #else
  83.     if (SockBase)
  84.         {
  85.         cleanup_sockets();
  86.         CloseLibrary(SockBase);
  87.         SockBase = 0;
  88.         }
  89. #endif
  90.     if (log_file)
  91.         fclose(log_file);
  92. }
  93.  
  94. /*
  95.  * main.  Parse arguments, invoke the protocol or command parser.
  96.  */
  97.  
  98. main(argc, argv)
  99.     int argc;
  100.     char *argv[];
  101. {
  102.     extern char *optarg;
  103.     extern int optind;
  104.     int ch;
  105.     char *user, *strrchr();
  106.     char fname[128];
  107.     extern int Enable_Abort;
  108.  
  109.     Enable_Abort = 0;
  110.  
  111. #ifdef AMI_TCP
  112.     SocketBase = OpenLibrary("bsdsocket.library", 2L);
  113.     if (! SocketBase)
  114.         exit(0);
  115.     SetErrnoPtr(&errno, sizeof errno);
  116. #else
  117.     SockBase = OpenLibrary("socket.library",0L);
  118.     if (! SockBase)
  119.         exit(0);
  120.     setup_sockets(3,&errno);
  121. #endif
  122.  
  123.     atexit(closesockets);
  124.  
  125.     tninit();        /* Clear out things */
  126.  
  127.     TerminalSaveState();
  128.  
  129.     if (prompt = strrchr(argv[0], '/'))
  130.         ++prompt;
  131.     else
  132.         prompt = argv[0];
  133.  
  134.     user = NULL;
  135.     autologin = 0;
  136.     while ((ch = getopt(argc, argv, "ade:L:n:")) != EOF) {
  137.         switch(ch) {
  138.         case 'a':
  139.             autologin = 1;
  140.             break;
  141.         case 'd':
  142.             debug = 1;
  143.             break;
  144.         case 'e':
  145.             set_escape_char(optarg);
  146.             break;
  147.         case 'L':
  148.             strcpy(fname,optarg);
  149.             log_file = fopen(fname,"a");
  150.             break;
  151.         case 'n':
  152.                 SetNetTrace(optarg);
  153.             break;
  154.         case '?':
  155.         default:
  156.             usage();
  157.             /* NOTREACHED */
  158.         }
  159.     }
  160.     argc -= optind;
  161.     argv += optind;
  162.  
  163.     if (argc) {
  164.         char *args[7], **argp = args;
  165.  
  166.         if (argc > 2)
  167.             usage();
  168.         *argp++ = prompt;
  169.         if (user) {
  170.             *argp++ = "-l";
  171.             *argp++ = user;
  172.         }
  173.         *argp++ = argv[0];        /* host */
  174.         if (argc > 1)
  175.             *argp++ = argv[1];    /* port */
  176.         *argp = 0;
  177.  
  178.         if (setjmp(toplevel) != 0)
  179.             Exit(0);
  180.         if (tn(argp - args, args) == 1)
  181.             return (0);
  182.         else
  183.             return (1);
  184.     }
  185.     (void)setjmp(toplevel);
  186.     for (;;) {
  187.             command(1, 0, 0);
  188.     }
  189. }
  190.  
  191. usage()
  192. {
  193.     fprintf(stderr, "usage: %s [-a] [ [-l user] host-name [port] ]\n",
  194.         prompt);
  195.     exit(1);
  196. }
  197.